﻿using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Linq;

namespace QrF.Core.API.Infrastructure
{
    /// <summary>
    /// Represents the Swagger/Swashbuckle operation filter used to document the implicit API version parameter.
    /// </summary>
    /// <remarks>This <see cref="IOperationFilter"/> is only required due to bugs in the <see cref="SwaggerGenerator"/>.
    /// Once they are fixed and published, this class can be removed.</remarks>
    public class SwaggerDefaultValues : IOperationFilter
    {
        /// <summary>
        /// Applies the filter to the specified operation using the given context.
        /// </summary>
        /// <param name="operation">The operation to apply the filter to.</param>
        /// <param name="context">The current operation filter context.</param>
        public void Apply(Operation operation, OperationFilterContext context)
        {
            // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/412
            // REF: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/pull/413
            //foreach (var parameter in operation.Parameters.OfType<NonBodyParameter>())
            //{
            //    var description = context.ApiDescription.ParameterDescriptions.First(p => p.Name == parameter.Name);

            //    if (parameter.Description == null)
            //    {
            //        parameter.Description = description.ModelMetadata.Description;
            //    }

            //    if (parameter.Default == null)
            //    {
            //        parameter.Default = description.RouteInfo.DefaultValue;
            //    }

            //    parameter.Required |= !description.RouteInfo.IsOptional;
            //}
            operation.Parameters.Add(new NonBodyParameter
            {
                Name = "dealerkey",
                In = "header",
                Description = "经销商Key",
                Required = true,
                Type = "string"
            });
            operation.Parameters.Add(new NonBodyParameter
            {
                Name = "tenantkey",
                In = "header",
                Description = "租户Key",
                Required = true,
                Type = "string"
            });
        }
    }
}
